package sao.controlador;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import sao.dao.Dao;
import sao.modelo.Agendamento;
import sao.modelo.Usuario;

/**
 * Servlet implementation class ExcluirAgendamentoProprio
 * Controla a solicitação de exclusão de agendamentos próprios, ou seja,
 * apenas do usuário (paciente) que está logado no momento
 */
public class ExcluirAgendamentoProprioController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// Verifica autenticação do usuário
		HttpSession sessao = request.getSession(false);
		if (sessao == null) {
			despachaUsuario(request, response, "login.jsp");
		}
		
		// Verifica permissão do usuário
		Usuario usuario = (Usuario) sessao.getAttribute("usuario");
		if (!(usuario.getPerfil().isOperacaoValida("excluirAgendamentoProprio.do"))) {
			request.setAttribute("mensagemErro", "ERRO: Você não tem permissão para efetuar esta operação!");
			despachaUsuario(request, response, "erro.jsp");
		}
		
		Dao dao = new Dao();
		
		try {
			// Captura os agendamentos ativos (de hoje em diante) do paciente
			List<Agendamento> agendamentos = dao.getAgendamentosAtivosPorPaciente(usuario.getCodigo());
			request.setAttribute("agendamentos", agendamentos);
			request.setAttribute("numeroAgendamentos", agendamentos.size());
			despachaUsuario(request, response, "listaAgendamentosProprios.jsp");
			
		} catch (ClassNotFoundException e) {
			despachaUsuarioPaginaErro(request, response, e.getMessage());
		} catch (SQLException e) {
			despachaUsuarioPaginaErro(request, response, e.getMessage());
		}
		
		
	}//FIM método doGet
	
	
	/**
	 * Envia o usuário a alguma página, dependendo se sua autenticação
	 * foi ou não aceita
	 * @param request
	 * @param response
	 * @param pagina
	 */
	private void despachaUsuario(HttpServletRequest request,
			HttpServletResponse response, String pagina) {
		RequestDispatcher view = request.getRequestDispatcher(pagina);
		try {
			view.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}//FIM método despachaUsuario
	
	
	/**
	 * Envia o usuário a página de erro padrão com alguma mensagem
	 * @param request
	 * @param response
	 * @param mensagemErro - Uma mensagem de erro a ser exibida ao usuário
	 */
	private void despachaUsuarioPaginaErro(HttpServletRequest request,
			HttpServletResponse response, String mensagemErro) {
		request.setAttribute("mensagemErro", mensagemErro);
		RequestDispatcher view = request.getRequestDispatcher("erro.jsp");
		try {
			view.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}//FIM método despachaUsuario
	

}
